<?php

namespace app\zyhsmarketing\lib;

use app\zyhsapi\model\marketing\ZyhsMarketingCallbackRecode;
use think\Db;
use XznsTools\curl\Curl;

class OppoMarketing
{
    private $marketingCallbackUrl = 'https://api.ads.heytapmobi.com/api/uploadActiveData';

    /**
     * OPPO 回传
     * @param string $oaid
     * @param int $uid
     * @param int $targetType 1=>激活 2=>注册 3=>充值
     * @return void
     */
    public function callBack(string $oaid, int $uid, int $targetType)
    {
        $nowTime = time();
        $zyhsMarketingCallbackRecodeModel = new ZyhsMarketingCallbackRecode();
        switch ($targetType)
        {
            case 2:
                $dataType = 2;
                break;
            case 3:
                $dataType = 7;
                break;
            default:
                $dataType = 1;
        }
        /**
         * 转化数据类型:
         * 1、激活，
         * 2、注册，
         * 3、游戏付费，
         * 4、次留，
         * 5、应用内授信，
         * 6、应 用内下单(电商)，
         * 7、应用付费
         * 8、自定义目标，
         * 9、第 3 日留存
         * 10、第 4 日留存，
         * 11、第 5 日留 存
         * 12、第6日留存，
         * 13、第7日 留存，
         * 14、第 8 日留存，
         * 15、拉 活，
         * 16、快应用付费，
         * 17、次留 (DP)
         * 18、卸载激活
         * 19、快应用 关键行为
         * 20、游戏/应用关键行 为
         * 21、长留高质量人群(废弃)
         * 22、应用付费次数
         * 23、长留自定 义
         * 24、快应用付费次数
         */
        $body = [
            'ouId' => $this->AES($oaid),
            'clientIp' => request()->ip(),
            'timestamp' => $nowTime * 1000,
            'pkg' => 'com.zhunle.rtc', // 包名
            'dataType' => $dataType,
            'channel' => 1, // 渠道:1、OPPO，2、一加，0、其他
            'type' => 2,    // 0:无加密(默认为 0) 1:imei md5 加密 2:oaid md5 加密
            'ascribeType' => 0, //归因类型:1:广告主归因，0:OPPO 是 1 归因(默认或者不填即为 0)
        ];

        $signature = md5(json_encode($body, JSON_UNESCAPED_UNICODE) . $body['timestamp'] . 'e0u6fnlag06lc3pl');
        $resData = Curl::request($this->marketingCallbackUrl, $body, 'POST', [
            'headers' => [
                'Content-Type' => 'application/json',
                'timestamp' => (string)($nowTime * 1000),
                'signature' => $signature,
            ],
        ], 'json');
        if (!$resData['success'] || !isset($resData['data']['ret']) || $resData['data']['ret'] !== 0)
        {   // 回传失败
            Db::table('good_wechat.zyhs_marketing_callback_error')->insert([
                'mobile_type' => 2, // 华为=>5 小米=>4 vivo=>3 oppo=>2
                'target_type' => $targetType,
                'oaid' => $oaid,
                'extend' => json_encode($resData, JSON_UNESCAPED_UNICODE),
            ]);
        } else
        {   // 添加 回传 记录
            $zyhsMarketingCallbackRecodeModel->insert([
                'task_id' => '',
                'oaid' => $oaid,
                'uid' => $uid,
                'type' => 2,    // 终端类型 华为=>5 小米=>4 vivo=>3 oppo=>2
                'target_type' => $targetType,
                'create_time' => $nowTime,
            ]);
        }
    }

    private function AES(string $str)
    {
        return openssl_encrypt($str, 'AES-128-ECB', base64_decode('XGAXicVG5GMBsx5bueOe4w=='), 0, "");
    }
}